package com.taichuan.selfcheck.ui.dialog;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;

import com.taichuan.selfcheck.R;
import com.taichuan.selfcheck.config.PropertyDefaultValue;
import com.taichuan.selfcheck.entity.TestResultEntity;

import org.greenrobot.eventbus.EventBus;

/**
 * 自定义测试结果弹窗
 * Created by yylqn on 2019.12.27
 */
public class ResultDialog extends Dialog {

    private TextView tips;//弹框文本内容
    private Button normal;//正常
    private Button error;//异常

    private String event;//测试功能的名字  || 事件
    private long index;//测试功能的序号

    private NormalOnClickListener normalOnClickListener;//正常按钮被点击了的监听器
    private ErrorOnClickListener errorOnClickListener;//异常按钮被点击了的监听器

    public ResultDialog(@NonNull Context context) {
        super(context);
    }

    public ResultDialog(@NonNull Context context, int themeResId) {
        super(context, themeResId);
    }

    public ResultDialog(long number,String event, @NonNull Context context){
        super(context);
        this.event = event;
        this.index=number;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.dialog_result);

        //不可取消
        setCancelable(false);

        getWindow().setBackgroundDrawableResource(android.R.color.transparent);//去掉白色背景(设置背景透明)

        //初始化界面控件
        initView();

        //初始化界面控件的事件
        initEvent();

        //预先写好按钮事件，正常异常都会发布EventBus事件
        setOnClickListener();
    }

    /**
     * 初始化界面控件
     */
    private void initView() {
        normal = findViewById(R.id.btn_result_normal);
        error = findViewById(R.id.btn_result_error);
        tips = findViewById(R.id.txt_result_tip);
    }

    /**
     * 初始化界面的正常按钮和异常按钮
     */
    private void initEvent() {
        //正常按钮被点击后，向外界提供监听
        normal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (normalOnClickListener != null) {
                    normalOnClickListener.onNormalClick();
                }
            }
        });
        //异常按钮被点击后，向外界提供监听
        error.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (errorOnClickListener != null) {
                    errorOnClickListener.onErrorClick();
                }
            }
        });
    }

    /**
     * 预先写好按钮事件，正常异常都会发布EventBus事件
     */
    private void setOnClickListener(){
        setNormalOnClickListener(new NormalOnClickListener() {
            @Override
            public void onNormalClick() {
                EventBus.getDefault().post(new TestResultEntity(index,event,PropertyDefaultValue.FUNCTION_TEST_RESULT_SUCCESS));
                dismiss();
            }
        });
        setErrorOnClickListener(new ErrorOnClickListener() {
            @Override
            public void onErrorClick() {
                EventBus.getDefault().post(new TestResultEntity(index,event,PropertyDefaultValue.FUNCTION_TEST_RESULT_FAILED));
                dismiss();
            }
        });
    }

    public void setNormalOnClickListener(NormalOnClickListener normalOnclickListener){
        this.normalOnClickListener = normalOnclickListener;
    }

    public void setErrorOnClickListener(ErrorOnClickListener errorOnClickListener){
        this.errorOnClickListener = errorOnClickListener;
    }

    /**
     * 兼容按键机型
     * @param event
     * @return
     */
    @Override
    public boolean dispatchKeyEvent(@NonNull KeyEvent event) {
        switch (event.getKeyCode()){
            case KeyEvent.KEYCODE_1:
                error.performClick();
                break;
            case KeyEvent.KEYCODE_3:
                normal.performClick();
                break;
        }
        return false;
    }

    /**
     * 测试结果正常按钮 回调
     */
    public interface NormalOnClickListener{
        void onNormalClick();
    }

    /**
     * 测试结果异常按钮 回调
     */
    public interface ErrorOnClickListener{
        void onErrorClick();
    }
}
